package arrays

// Filter 破坏原数组的过滤 但是性能可能更好
func Filter[T any](arr []T, filter func(item T) bool) (res []T) {
	if arr == nil || len(arr) == 0 {
		return []T{}
	}
	res = arr[:0]
	for _, item := range arr {
		if filter(item) {
			res = append(res, item)
		}
	}
	return
}

// FilterCopy 不破坏原数组 返回新数组
func FilterCopy[T any](arr []T, filter func(item T) bool) (res []T) {
	if arr == nil || len(arr) == 0 {
		return []T{}
	}
	res = make([]T, 0, len(arr))
	for _, item := range arr {
		if filter(item) {
			res = append(res, item)
		}
	}
	return
}
